package com.hucais.utils;

import cn.hutool.core.util.NumberUtil;
import com.hucais.common.AppConstant;
import org.apache.commons.lang3.StringUtils;

import java.util.regex.Matcher;
import java.util.regex.Pattern;

public class CommonUtil {
    /**
     * Hive数据的分隔符
     */
    private static final String HIVE_SPLIT_STR = "\u0001";

    /**
     * 过滤一些不必要的字符(eg:单引号,双引号,\t,\r,\n)
     *
     * @param s 需要过滤的字符串
     * @return
     */
    public static String filterSomeStr(String s) {
        if (StringUtils.isBlank(s)) {
            return s;
        } else {
            String dest = "";
            Pattern p = Pattern.compile("['\"\t\r\n¥￥]");
            Matcher m = p.matcher(s);
            dest = m.replaceAll("");
            return dest;
        }
    }

    /**
     * 过滤爬虫数据的敏感字符
     *
     * @param s 需要过滤的字符串
     * @return
     */
    public static String filterSpiderData(String s) {
        if (StringUtils.isBlank(s)) {
            return s;
        } else {
            String tmp = s.replaceAll(HIVE_SPLIT_STR, "").replaceAll("\"\"\"", "");
            String dest = "";
            Pattern p = Pattern.compile("[\t\r\n¥￥]");
            Matcher m = p.matcher(tmp);
            dest = m.replaceAll("");
            return dest;
        }
    }

    /**
     * 处理空字符字段的内容
     *
     * @param s
     * @return
     */
    public static String handleBlankStr(String s) {
        return CommonUtil.isBlankExt(s) ? AppConstant.NONMAL_STR_VAL : CommonUtil.filterSpiderData(s);
    }

    /**
     * 扩展版的判断数据是否为空
     *
     * @param s
     * @return
     */
    public static boolean isBlankExt(String s) {
        String[] nullArr = {"null", "None", "未知"};
        if (StringUtils.isBlank(s)) {
            return true;
        } else {
            for (String s1 : nullArr) {
                if (s1.equals(s)) {
                    return true;
                }
            }
        }
        return false;
    }

    public static boolean isNotBlankExt(String s) {
        return !CommonUtil.isBlankExt(s);
    }

    /**
     * 处理空数字字段的内容
     *
     * @param s
     * @return
     */
    public static Long handleBlankNumber(String s) {
        if (AppConstant.NONMAL_STR_VAL.equals(CommonUtil.handleBlankStr(s))) {
            return 0L;
        } else {
            String newS = s.trim().replaceAll(" ", "").replaceAll(" ", "");
            if (newS.matches("^[0-9]*(\\.0+)?$")) {
                if (newS.length() > 20) {
                    return NumberUtil.parseLong(newS.substring(0, 19));
                } else {
                    return NumberUtil.parseLong(newS);
                }
            } else {
                return -1L;
            }
        }
    }

    /**
     * (Float类型)处理空带小数字段的内容
     *
     * @param s
     * @return
     */
    public static Float handleBlankFloat(String s) {
        if (AppConstant.NONMAL_STR_VAL.equals(CommonUtil.handleBlankStr(s))) {
            return 0.00f;
        } else {
            String newS = s.trim().replaceAll(" ", "").replaceAll(" ", "");
            if (newS.matches("\\d+(\\.\\d+)?")) {
                return Float.parseFloat(newS);
            } else {
                return -1.00f;
            }
        }
    }

    /**
     * (Double类型)处理空带小数字段的内容
     *
     * @param s
     * @return
     */
    public static Double handleBlankDouble(String s) {
        if (AppConstant.NONMAL_STR_VAL.equals(CommonUtil.handleBlankStr(s))) {
            return 0.00d;
        } else {
            String newS = s.trim().replaceAll(" ", "").replaceAll(" ", "");
            if (newS.matches("\\d+(\\.\\d+)?")) {
                return Double.parseDouble(newS);
            } else {
                return -1.00d;
            }
        }
    }
}
